gui.util.Map = function() {
	this.elements = new Array();
}

gui.util.Map.prototype = {
		
		/**
		 * 获取MAP元素个数
		 */
		size:function() {
			
			return this.elements.length;
		}, 
		
		/**
		 * 判断MAP是否为空
		 */
		isEmpty:function() {
			
			return (this.elements.length < 1);
		}, 
		
		/**
		 * 删除MAP所有元素
		 */
		clear:function() {
			this.elements = new Array();
		}, 
		
		/**
		 * 向MAP中增加元素（key, value)
		 */
		put:function(_key, _value) {
			this.elements.push({
				key:_key, 
				value:_value
			});
		}, 
		
		/**
		 * 删除指定KEY的元素，成功返回True，失败返回False
		 */
		removeByKey:function(_key) {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].key == _key) {
						this.elements.splice(i, 1);
						return true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 删除指定VALUE的元素，成功返回True，失败返回False
		 */
		removeByValue:function(_value) {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].value == _value) {
						this.elements.splice(i, 1);
						
						return true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 删除指定VALUE的元素，成功返回True，失败返回False
		 */
		removeByValueAndKey:function(_key, _value) {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].value == _value && this.elements[i].key == _key) {
						this.elements.splice(i, 1);
						return true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 获取指定KEY的元素值VALUE，失败返回NULL
		 */
		get:function(_key) {
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].key == _key) {
						return this.elements[i].value;
					}
				}
			} catch (e) {
				return false;
			}
			
			return false;
		}, 
		
		/**
		 * 获取指定索引的元素（使用element.key，element.value获取KEY和VALUE），失败返回NULL
		 */
		element:function(_index) {
			if (_index < 0 || _index >= this.elements.length) {
				return null;
			}
			
			return this.elements[_index];
		}, 
		
		/**
		 * 判断MAP中是否含有指定KEY的元素
		 */
		containsKey:function(_key) {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].key == _key) {
						bln = true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 判断MAP中是否含有指定VALUE的元素
		 */
		containsValue:function(_value) {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].value == _value) {
						bln = true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 判断MAP中是否含有指定VALUE的元素
		 */
		containsObj:function() {
			var bln = false;
			try {
				for (i = 0; i < this.elements.length; i++) {
					if (this.elements[i].value == _value && this.elements[i].key == _key) {
						bln = true;
					}
				}
			} catch (e) {
				bln = false;
			}
			
			return bln;
		}, 
		
		/**
		 * 获取MAP中所有VALUE的数组（ARRAY）
		 */
		values:function() {
			var arr = new Array();
			for (i = 0; i < this.elements.length; i++) {
				arr.push(this.elements[i].value);
			}
			
			return arr;
		}, 
		
		/**
		 * 获取MAP中所有VALUE的数组（ARRAY）
		 */
		valuesByKey:function() {
			var arr = new Array();
			for (i = 0; i < this.elements.length; i++) {
				if (this.elements[i].key == _key) {
					arr.push(this.elements[i].value);
				}
			}
			
			return arr;
		}, 
		
		/**
		 * 获取MAP中所有KEY的数组（ARRAY）
		 */
		keys:function() {
			var arr = new Array();
			for (i = 0; i < this.elements.length; i++) {
				arr.push(this.elements[i].key);
			}
			
			return arr;
		}, 
		
		/**
		 * 获取key通过value
		 */
		keysByValue:function(_value) {
			 var arr = new Array();
			 for (i = 0; i < this.elements.length; i++) {
				 if(_value == this.elements[i].value) {
					 arr.push(this.elements[i].key);
				 }
			 }
			 
			 return arr;
		}, 
		
		/**
		 * 获取MAP中所有KEY的数组（ARRAY）
		 */
		keysRemoveDuplicate:function() {
			var arr = new Array();
			for (i = 0; i < this.elements.length; i++) {
				var flag = true;
				for(var j=0;j<arr.length;j++) {
					if(arr[j] == this.elements[i].key) {
						flag = false;
						break;
					}
				}
				
				if(flag) {
					arr.push(this.elements[i].key);
				}
			}
			
			return arr;
		}
}